package com.JingYan.HuaWei;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.stream.Collectors;

/**
 * @program: JingYan
 * @ClassName: JK011.java
 * @author: DongJiaQi
 * @version: 1.0.0
 * @Description: 华为机考 查找众数及中位数
 * @createTime 2024年04月10日 16:59:00
 */
public class JK011 {
    /**
     * 磁盘容量排序
     * 磁盘的容量单位常用的有M，G，T这三个等级，它们之间的换算关系为1T = 1024G，1G = 1024M，现在给定n块磁盘的容量，请对它们按从小到大的顺序进行稳定排序，例如给定5块盘的容量，1T，20M，3G，10G6T，3M12G9M排序后的结果为20M，3G，3M12G9M，1T，10G6T。注意单位可以重复出现，上述3M12G9M表示的容量即为3M+12G+9M，和12M12G相等。
     * 输入描述:
     * 输入第一行包含一个整数n(2 <= n <= 100)，表示磁盘的个数，接下的n行，每行一个字符串(长度大于2，小于30)，表示磁盘的容量，由一个或多个格式为mv的子串组成，其中m表示容量大小，v表示容量单位，例如20M，1T，30G，10G6T，3M12G9M。
     * 磁盘容量m的范围为1到1024的正整数，容量单位v的范围只包含题目中提到的M，G，T三种，换算关系如题目描述。
     * 输出描述:
     * 输出n行，表示n块磁盘容量排序后的结果。
     * 示例1：
     * 输入
     * 3
     * 1G
     * 2G
     * 1024M
     * 输出
     * 1G
     * 1024M
     * 2G
     * 说明
     * 1G和1024M容量相等，稳定排序要求保留它们原来的相对位置，故1G在1024M之前
     * 示例2：
     * 输入
     * 3
     * 2G4M
     * 3M2G
     * 1T
     * 输出
     * 3M2G
     * 2G4M
     * 1T
     * 说明
     * 1T的容量大于2G4M，2G4M的容量大于3M2G
     */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = Integer.parseInt(sc.nextLine());
        List <String> list = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            String s = sc.nextLine();
            list.add(s);
        }
        list.stream().sorted(
                (s1, s2) -> {
                    long num1 = getNum(s1);
                    long num2 = getNum(s2);
                    return num1>=num2?1:-1;
                }
        ).collect(Collectors.toList()).forEach(System.out::println);
    }
    public static long getNum(String s){
        long sumNum = 0;
        long num =0;
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (Character.isDigit(c)){
                num =num*10+c-'0';
            }else {
                switch (c){
                    case 'M':
                        sumNum+=num;
                        num=0;
                        break;
                    case 'G':
                        sumNum+=num*1024;
                        num=0;
                        break;
                    case 'T':
                        sumNum+=num*1024*1024;
                        num=0;
                        break;
                }
            }

        }
        return sumNum;
    }

}
